package com.example.wtt.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.example.wtt.entity.FilesF;
import com.example.wtt.mapper.FileMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

@RestController
@RequestMapping("/file")
public class FilesController {
    @Value("${files.upload.path}")
    private String fileUploadPath;
    @Value("${avatar.upload.path}")
    private String avatarUploadPath;
    @Resource
    private FileMapper fileMapper;

    @PostMapping("/uploadImg")
    public Object uploadImg(@RequestParam("file") MultipartFile file) throws IOException {
        System.out.println(file);
        String originalFilename = file.getOriginalFilename();
        String type = FileUtil.extName(originalFilename);
        long size = file.getSize();

        // 定义一个文件唯一的标识码
        String uuid = IdUtil.fastSimpleUUID();
        String fileUUID = uuid + StrUtil.DOT + type;

        File uploadFile = new File(fileUploadPath + fileUUID);
        // 判断配置的文件目录是否存在，若不存在则创建一个新的文件目录
        File parentFile = uploadFile.getParentFile();
        if(!parentFile.exists()) {
            parentFile.mkdirs();
        }

        String url;
        url = "";
        // 从数据库查询是否存在相同的记录
        // 上传文件到磁盘
        file.transferTo(uploadFile);
        // 数据库若不存在重复文件，则不删除刚才上传的文件
        url = " http://82.156.199.126:9090/file/" + fileUUID;

        // 存储到数据库
        FilesF saveFile = new FilesF();
        saveFile.setFileName(originalFilename);
        saveFile.setType(type);
        saveFile.setSize(size/1024);
        saveFile.setUrl(url);
        fileMapper.insert(saveFile);
        return JSONUtil.parseObj("{\"errno\":0, \"data\": [{\"url\": \""+url+"\"}]}");
    }

//    @PostMapping("/uploadAvatar")
//    public Object uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException {
//        System.out.println(file);
//        String originalFilename = file.getOriginalFilename();
//        String type = FileUtil.extName(originalFilename);
//        long size = file.getSize();
//
//        // 定义一个文件唯一的标识码
//        String uuid = IdUtil.fastSimpleUUID();
//        String fileUUID = uuid + StrUtil.DOT + type;
//
//        File uploadFile = new File(avatarUploadPath + fileUUID);
//        // 判断配置的文件目录是否存在，若不存在则创建一个新的文件目录
//        File parentFile = uploadFile.getParentFile();
//        if(!parentFile.exists()) {
//            parentFile.mkdirs();
//        }
//
//        String url;
//        url = "";
//        // 从数据库查询是否存在相同的记录
//        // 上传文件到磁盘
//        file.transferTo(uploadFile);
//        // 数据库若不存在重复文件，则不删除刚才上传的文件
//        url = " http://49.232.161.238:9090/file/" + fileUUID;
//
//        // 存储到数据库
//        FilesF saveFile = new FilesF();
//        saveFile.setFileName(originalFilename);
//        saveFile.setType(type);
//        saveFile.setSize(size/1024);
//        saveFile.setUrl(url);
//        fileMapper.insert(saveFile);
//        return JSONUtil.parseObj("{\"errno\":0, \"data\": [{\"url\": \""+url+"\"}]}");
//    }

    @GetMapping("/{fileUUID:.+}")
    public ResponseEntity<byte[]> getImage(@PathVariable String fileUUID) throws IOException {
        File file = new File(fileUploadPath + fileUUID);
        if (file.exists()) {
            byte[] imageBytes = Files.readAllBytes(file.toPath());
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.IMAGE_JPEG); // 或者根据文件类型设置相应的Content-Type
            return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }
}
